Niagara Module
Niagara Module是Niagara中可以使用节点自定义的模块,可以说类似于Houdini的VOP。
在加号处搜索New Scratch Pad Module即可新建。
很简单,自己创建一个Niagara Funtion Script,然后先添加任意一个函数节点,而后将Function Script设置为自己的即可。

你以为保存了,compile了之后就会暴露参数?大错特错,Niagara需要点击上方的Apply才会暴露出参数以供Emitter。

当我们想要读取其他粒子的属性时可以使用如下方法,通过index访问。
但是当点击Apply之后应用的发射器会报错,你需要先改成Particle Attribute Reader,然后删除掉默认值,然后填写要读取的发射器的名字才能运作。


整数相除会进行四舍五入,因此如果想要得到浮点数结果,需要使用Convert节点将某一个整数先转换为浮点数。
注意发射器的位置(即Engine.Owner.Position)是处在世界坐标系下的,要先转换到模拟坐标系下才能和粒子的位置进行计算。
实际上可以在非Simulation Stage进行For循环,需要使用Map For节点。现在可能在写入读取属性上有一些bug,但在4.26中,如下节点可以正常写入到粒子的Pos属性中。
Map For节点是写在循环结束的,每次循环会写入Map For中的参数。
那可能是因为你需要从一些特定类型的pin引出来创建节点才能搜索到,例如在直接右键无法创建Sample Texture 2D节点,但是如果从一个Texture Sample类型的pin引出创建啧会有此节点。
显而易见,将世界位置转换为屏幕的UV。
转换坐标空间的,需要注意,粒子原本所处空间为Simulation空间。
Return Normalized Exec Index会从零开始获取粒子从零开始的序号(取消勾选此表达式的唯一复选框可从1开始计数),因此我们可以使用此功能来制作规整的网格粒子。
PS: 需要注意一下计算的精度问题,上图中使用9.999之类的数字是避免出现浮点计算精度问题造成网格错位
Grid Location也可以进行网格状排列,但是好像没有办法像上面那样准确地控制控制点序号?